package top.lixunda.ecommerce.server.user.service;


import top.lixunda.ecommerce.server.user.api.entity.db.AccountDO;
import top.lixunda.ecommerce.server.user.api.entity.db.AccountBindingDO;
import top.lixunda.ecommerce.server.user.api.entity.db.UserDetailDO;
import top.lixunda.ecommerce.server.user.api.entity.db.UserInfoDO;
import top.lixunda.ecommerce.server.user.api.entity.dto.UserInfoChgDTO;
import top.lixunda.ecommerce.server.user.dto.BindingAccountDTO;
import top.lixunda.ecommerce.server.user.dto.InsertUserDTO;

/**
 * @author Xumda
 * @version time:2019/11/20 9:43
 */
@SuppressWarnings("UnusedReturnValue")
public interface IUserService {

    /**
     * 验证用户是否允许登陆，如密码输错三次锁定之类
     *
     * @param userDetail 用户信息
     * @return 不允许登陆的原因，若允许登陆返回null
     */
    String isLock(UserDetailDO userDetail);

    /**
     * 获取账户绑定信息，只能获取一个，若不存在返回null
     *
     * @param bindingType    三方账户类型
     * @param bindingAccount 三方账户账号
     * @return 账户绑定信息，只能获取一个，若不存在返回null
     */
    AccountBindingDO getBinding(Integer bindingType, String bindingAccount);

    /**
     * 插入用户登录日志
     *
     * @param userDetail 用户信息
     * @param success 登陆是否成功
     */
    void insertLoginLog(UserDetailDO userDetail, boolean success);

    /**
     * 插入新的用户数据，会创建account并初始化绑定
     *
     * @param insertUserDTO 包含新建用户必要的数据
     * @return AccountDO，包含主键
     */
    AccountDO insertNewUser(InsertUserDTO insertUserDTO);

    /**
     * 绑定三方账户
     *
     * @param bindingAccountDTO 绑定账户DTO
     * @return 插入的binding数据
     */
    AccountBindingDO bindingAccount(BindingAccountDTO bindingAccountDTO);

    /**
     * 更新用户信息
     *
     * @param userInfoChgDTO 修改用户信息DTO
     * @return 返回插入的用户信息
     */
    UserInfoDO updateUserInfo(UserInfoChgDTO userInfoChgDTO);

    /**
     * 插入新用户信息
     * @param account 系统账号id
     * @param userInfoChgDTO 账号信息
     * @return UserInfoDO
     */
    UserInfoDO insertUserInfo(Integer account, UserInfoChgDTO userInfoChgDTO);

}
